/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package mx.unam.fciencias.ActividadesCulturales.pages.Indicador;

import java.math.BigInteger;
import java.util.List;
import mx.unam.fciencias.ActividadesCulturales.commons.CatalogoSelectModel;
import mx.unam.fciencias.ActividadesCulturales.pages.Index;
import mx.unam.fciencias.ActividadesCulturales.services.ServicioEntidadAcademica;
import mx.unam.fciencias.ActividadesCulturales.services.ServicioIndicador;
import mx.unam.fciencias.actividadesculturales.entidades.db.EntidadAcademica;
import mx.unam.fciencias.actividadesculturales.entidades.db.Indicador;
import mx.unam.fciencias.actividadesculturales.entidades.db.enums.DependenciaAdministrativa;
import mx.unam.fciencias.actividadesculturales.entidades.db.enums.TipoActividad;
import mx.unam.fciencias.actividadesculturales.entidades.portal.UsuarioSistema;
import org.apache.tapestry5.EventContext;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.Service;
import org.apache.tapestry5.annotations.SessionState;
import org.apache.tapestry5.corelib.components.Form;
import org.apache.tapestry5.corelib.components.Select;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.internal.services.StringValueEncoder;
import org.apache.tapestry5.ioc.annotations.Inject;

/**
 *
 * @author lumartin
 */
public class Consultar {
    @SessionState
    @Property
    private UsuarioSistema usuario;
    private boolean usuarioExists;

    @Property
    private DependenciaAdministrativa depAdmin;

    @SuppressWarnings("unused")
    @Property
    private StringValueEncoder _stringEncoder = new StringValueEncoder();

    @Persist
    private boolean eA;
    @Persist
    private boolean dA;
    @Persist
    private boolean tA;
    @Property
    private TipoActividad tipoActividad;

    @Property
    private Long anio1;

    @Property
    private Long anio2;

    private String nivelAgreg;

    @Component(id = "anio1")
    private Select _anioField;

    @Property
    private Indicador _indicador;

    @Inject
    @Service("servicioIndicador")
    private ServicioIndicador _servicioIndicador;

    private long _entidadAcademicaId;

    @Property
    private EntidadAcademica _entidadAcademica;

    @Property
    private CatalogoSelectModel<EntidadAcademica> _entidadesAcademicas;

    @InjectComponent
    private Form consultarIndicadores;

    @Inject
    @Service("servicioEntidadAcademica")
    private ServicioEntidadAcademica servicioEntidadAcademica;
    @Property @Persist
    private boolean tablaVisible;
    @InjectComponent
    private Zone resultados;

    private boolean usuarioCorrecto() {

        if (!usuarioExists) {
            return false;
        } else {
            if (usuario.puedeEscribir()) {
                return true;
            }
        }
        return false;
    }

    public Object onActivate(EventContext contexto) {
        if (usuarioCorrecto()) {
         if (contexto.getCount() == 2) {
             tablaVisible = false;
             try {
                 BigInteger idIndicador = contexto.get(BigInteger.class, 0);
                 nivelAgreg = contexto.get(String.class, 1);
                 _indicador = _servicioIndicador.getById(idIndicador.longValue());
                 if (nivelAgreg.equals("E")) {
                     eA = true;
                     dA = false;
                     tA = false;
                 } else if (nivelAgreg.equals("D")) {
                     eA = false;
                     dA = true;
                     tA = false;
                 } else if (nivelAgreg.equals("T")) {
                     eA = false;
                     dA = false;
                     tA = true;
                 }
                } catch (Exception e) {
                    return Ver.class;
                }
            }
            return null;
        } else {
            return Index.class;
        }
    }

//        public Object onActivate(EventContext contexto) {
//        if (!usuarioExists || !usuario.puedeLeer()) {
//            return Index.class;
//        }
//        return null;
//    }

    void onPrepare() {
	// Get all persons - ask business service to find them (from the database)
         List<EntidadAcademica> entidadesAcademicas = servicioEntidadAcademica.getTodas();
        _entidadesAcademicas = new CatalogoSelectModel<EntidadAcademica>(entidadesAcademicas);
        _entidadAcademica = findEntidadAcademicaInModel(_entidadAcademicaId);
    }

//    void onValidateForm() {
//        if (anio1 >= anio2) {
//            consultarIndicadores.recordError(_anioField,
//                    "El primer año a comparar debe de ser menor que el segundo.");
//        }
//    }

    EntidadAcademica findEntidadAcademicaInModel(Long entidadAcademicaId) {

	for (EntidadAcademica entidadAcademica : _entidadesAcademicas.getList()) {
		if (entidadAcademica.getId() == entidadAcademicaId) {
			return entidadAcademica;
		}
	}
	return null;
    }

    Object onSuccess() {
        tablaVisible = true;
        /*if (eA) {
            _servicioIndicador.findIndicadorByEA(_indicador, _entidadAcademica,anio1,anio2);
        } else if(dA) {
            _servicioIndicador.findIndicadorByDA(depAdmin,anio1,anio2);
        } else {
            _servicioIndicador.findIndicadorByEA(tipoActividad,anio1,anio2);
        }*/
        return resultados.getBody();
    }

    public boolean isEA() {
        return eA;
    }
    public boolean isDA() {
        return dA;
    }
    public boolean isTA() {
        return tA;
    }
}
